package java学习.SHEIN笔试;

import java.util.ArrayList;
import java.util.Stack;
import java.util.TreeSet;

/**
 * **************
 * 项目名称: 蓝桥杯 <br/>
 * 文件名称:  <br/>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br/>
 * 文件创建：刘世锦 <br/>
 * 创建时间: 2022/7/7 <br/>
 *
 * @version v1.0 <br/>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br/>
 * *************
 */
public class 字符串解码 {
    public String decodeString (String s) {
        // 双栈
        // 一个记录数字， 可能出现： 12[a] 则需要 *10
        // 一个记录 字符串 若后面还有字符串，继续加 ； StringBuffer
        // 遇到 [  全部压栈，初始化数字，字符串
        // 遇到 ]  弹出栈， for循环计算拼接 并且加上前面已经拼接好的字符串(最里边计算的字符串)

        Stack<Integer> nums = new Stack<>();
        Stack<String> strings = new Stack<>();
        int num = 0;
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) >='0' && s.charAt(i)<='9'){
                num = num*10+ Integer.parseInt(s.charAt(i)+"");
            }  else if (s.charAt(i)=='['){
                nums.push(num);
                strings.push(res.toString());
                num = 0;
                res = new StringBuilder();

            }else if (s.charAt(i)==']'){
                int  pop = nums.pop();
                StringBuilder temp = new StringBuilder();
                for (int j = 0; j < pop; j++) {
                    temp.append(res.toString()); // 此时累加当前的res字符串
                }
//                res = new StringBuilder(strings.pop() + temp);  应该出栈在先，因为从内到外
                res = new StringBuilder( strings.pop()+temp );
            }
//             else if (s.charAt(i)==']'){
//                 int  pop = nums.pop();
//                 StringBuilder temp = new StringBuilder(strings.pop());
//                 for (int j = 0; j < pop; j++) {
//                     temp.append(res.toString()); // 此时累加当前的res字符串
//                 }
//                 res=temp; // 将
//             }

            else {
                res.append(s.charAt(i));
            }
        }
        return  res.toString();
    }

    public static void main(String[] args) {
         int a = 1;
         Integer b = new Integer(1);
         String s = "1";

//         int a = 1; Integer b = 1;
        System.out.println(a==b);
    }
}
